Home | History | Annotate | Download | only in include
      1 /**************************************************************************\
      2 *
      3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
      4 *
      5 * Module Name:
      6 *
      7 *   GdiplusEnums.h
      8 *
      9 * Abstract:
     10 *
     11 *   Various enumeration types
     12 *
     13 \**************************************************************************/
     14 
     15 #ifndef _GDIPLUSENUMS_H
     16 #define _GDIPLUSENUMS_H
     17 
     18 
     19 //--------------------------------------------------------------------------
     20 // Default bezier flattening tolerance in device pixels.
     21 //--------------------------------------------------------------------------
     22 
     23 const float FlatnessDefault = 1.0f/4.0f;
     24 
     25 //--------------------------------------------------------------------------
     26 // Graphics and Container State cookies
     27 //--------------------------------------------------------------------------
     28 
     29 typedef UINT     GraphicsState;
     30 typedef UINT     GraphicsContainer;
     31 
     32 //--------------------------------------------------------------------------
     33 // Fill mode constants
     34 //--------------------------------------------------------------------------
     35 
     36 enum FillMode
     37 {
     38     FillModeAlternate,        // 0
     39     FillModeWinding           // 1
     40 };
     41 
     42 //--------------------------------------------------------------------------
     43 // Quality mode constants
     44 //--------------------------------------------------------------------------
     45 
     46 enum QualityMode
     47 {
     48     QualityModeInvalid   = -1,
     49     QualityModeDefault   = 0,
     50     QualityModeLow       = 1, // for apps that need the best performance
     51     QualityModeHigh      = 2  // for apps that need the best rendering quality
     52 };
     53 
     54 //--------------------------------------------------------------------------
     55 // Alpha compositing mode constants
     56 //--------------------------------------------------------------------------
     57 
     58 enum CompositingMode
     59 {
     60     CompositingModeSourceOver,    // 0
     61     CompositingModeSourceCopy     // 1
     62 };
     63 
     64 //--------------------------------------------------------------------------
     65 // Alpha compositing quality constants
     66 //--------------------------------------------------------------------------
     67 
     68 enum CompositingQuality
     69 {
     70     CompositingQualityInvalid          = QualityModeInvalid,
     71     CompositingQualityDefault          = QualityModeDefault,
     72     CompositingQualityHighSpeed        = QualityModeLow,
     73     CompositingQualityHighQuality      = QualityModeHigh,
     74     CompositingQualityGammaCorrected,
     75     CompositingQualityAssumeLinear
     76 };
     77 
     78 //--------------------------------------------------------------------------
     79 // Unit constants
     80 //--------------------------------------------------------------------------
     81 
     82 enum Unit
     83 {
     84     UnitWorld,      // 0 -- World coordinate (non-physical unit)
     85     UnitDisplay,    // 1 -- Variable -- for PageTransform only
     86     UnitPixel,      // 2 -- Each unit is one device pixel.
     87     UnitPoint,      // 3 -- Each unit is a printer's point, or 1/72 inch.
     88     UnitInch,       // 4 -- Each unit is 1 inch.
     89     UnitDocument,   // 5 -- Each unit is 1/300 inch.
     90     UnitMillimeter  // 6 -- Each unit is 1 millimeter.
     91 };
     92 
     93 //--------------------------------------------------------------------------
     94 // MetafileFrameUnit
     95 //
     96 // The frameRect for creating a metafile can be specified in any of these
     97 // units.  There is an extra frame unit value (MetafileFrameUnitGdi) so
     98 // that units can be supplied in the same units that GDI expects for
     99 // frame rects -- these units are in .01 (1/100ths) millimeter units
    100 // as defined by GDI.
    101 //--------------------------------------------------------------------------
    102 enum MetafileFrameUnit
    103 {
    104     MetafileFrameUnitPixel      = UnitPixel,
    105     MetafileFrameUnitPoint      = UnitPoint,
    106     MetafileFrameUnitInch       = UnitInch,
    107     MetafileFrameUnitDocument   = UnitDocument,
    108     MetafileFrameUnitMillimeter = UnitMillimeter,
    109     MetafileFrameUnitGdi                        // GDI compatible .01 MM units
    110 };
    111 
    112 //--------------------------------------------------------------------------
    113 // Coordinate space identifiers
    114 //--------------------------------------------------------------------------
    115 
    116 enum CoordinateSpace
    117 {
    118     CoordinateSpaceWorld,     // 0
    119     CoordinateSpacePage,      // 1
    120     CoordinateSpaceDevice     // 2
    121 };
    122 
    123 //--------------------------------------------------------------------------
    124 // Various wrap modes for brushes
    125 //--------------------------------------------------------------------------
    126 
    127 enum WrapMode
    128 {
    129     WrapModeTile,        // 0
    130     WrapModeTileFlipX,   // 1
    131     WrapModeTileFlipY,   // 2
    132     WrapModeTileFlipXY,  // 3
    133     WrapModeClamp        // 4
    134 };
    135 
    136 //--------------------------------------------------------------------------
    137 // Various hatch styles
    138 //--------------------------------------------------------------------------
    139 
    140 enum HatchStyle
    141 {
    142     HatchStyleHorizontal,                   // 0
    143     HatchStyleVertical,                     // 1
    144     HatchStyleForwardDiagonal,              // 2
    145     HatchStyleBackwardDiagonal,             // 3
    146     HatchStyleCross,                        // 4
    147     HatchStyleDiagonalCross,                // 5
    148     HatchStyle05Percent,                    // 6
    149     HatchStyle10Percent,                    // 7
    150     HatchStyle20Percent,                    // 8
    151     HatchStyle25Percent,                    // 9
    152     HatchStyle30Percent,                    // 10
    153     HatchStyle40Percent,                    // 11
    154     HatchStyle50Percent,                    // 12
    155     HatchStyle60Percent,                    // 13
    156     HatchStyle70Percent,                    // 14
    157     HatchStyle75Percent,                    // 15
    158     HatchStyle80Percent,                    // 16
    159     HatchStyle90Percent,                    // 17
    160     HatchStyleLightDownwardDiagonal,        // 18
    161     HatchStyleLightUpwardDiagonal,          // 19
    162     HatchStyleDarkDownwardDiagonal,         // 20
    163     HatchStyleDarkUpwardDiagonal,           // 21
    164     HatchStyleWideDownwardDiagonal,         // 22
    165     HatchStyleWideUpwardDiagonal,           // 23
    166     HatchStyleLightVertical,                // 24
    167     HatchStyleLightHorizontal,              // 25
    168     HatchStyleNarrowVertical,               // 26
    169     HatchStyleNarrowHorizontal,             // 27
    170     HatchStyleDarkVertical,                 // 28
    171     HatchStyleDarkHorizontal,               // 29
    172     HatchStyleDashedDownwardDiagonal,       // 30
    173     HatchStyleDashedUpwardDiagonal,         // 31
    174     HatchStyleDashedHorizontal,             // 32
    175     HatchStyleDashedVertical,               // 33
    176     HatchStyleSmallConfetti,                // 34
    177     HatchStyleLargeConfetti,                // 35
    178     HatchStyleZigZag,                       // 36
    179     HatchStyleWave,                         // 37
    180     HatchStyleDiagonalBrick,                // 38
    181     HatchStyleHorizontalBrick,              // 39
    182     HatchStyleWeave,                        // 40
    183     HatchStylePlaid,                        // 41
    184     HatchStyleDivot,                        // 42
    185     HatchStyleDottedGrid,                   // 43
    186     HatchStyleDottedDiamond,                // 44
    187     HatchStyleShingle,                      // 45
    188     HatchStyleTrellis,                      // 46
    189     HatchStyleSphere,                       // 47
    190     HatchStyleSmallGrid,                    // 48
    191     HatchStyleSmallCheckerBoard,            // 49
    192     HatchStyleLargeCheckerBoard,            // 50
    193     HatchStyleOutlinedDiamond,              // 51
    194     HatchStyleSolidDiamond,                 // 52
    195 
    196     HatchStyleTotal,    // must be after all unique hatch styles
    197 
    198     HatchStyleLargeGrid = HatchStyleCross,  // 4  an alias for the cross style
    199 
    200     HatchStyleMin       = HatchStyleHorizontal,
    201     HatchStyleMax       = HatchStyleTotal - 1,
    202 };
    203 
    204 //--------------------------------------------------------------------------
    205 // Dash style constants
    206 //--------------------------------------------------------------------------
    207 
    208 enum DashStyle
    209 {
    210     DashStyleSolid,          // 0
    211     DashStyleDash,           // 1
    212     DashStyleDot,            // 2
    213     DashStyleDashDot,        // 3
    214     DashStyleDashDotDot,     // 4
    215     DashStyleCustom          // 5
    216 };
    217 
    218 //--------------------------------------------------------------------------
    219 // Dash cap constants
    220 //--------------------------------------------------------------------------
    221 
    222 enum DashCap
    223 {
    224     DashCapFlat             = 0,
    225     DashCapRound            = 2,
    226     DashCapTriangle         = 3
    227 };
    228 
    229 //--------------------------------------------------------------------------
    230 // Line cap constants (only the lowest 8 bits are used).
    231 //--------------------------------------------------------------------------
    232 
    233 enum LineCap
    234 {
    235     LineCapFlat             = 0,
    236     LineCapSquare           = 1,
    237     LineCapRound            = 2,
    238     LineCapTriangle         = 3,
    239 
    240     LineCapNoAnchor         = 0x10, // corresponds to flat cap
    241     LineCapSquareAnchor     = 0x11, // corresponds to square cap
    242     LineCapRoundAnchor      = 0x12, // corresponds to round cap
    243     LineCapDiamondAnchor    = 0x13, // corresponds to triangle cap
    244     LineCapArrowAnchor      = 0x14, // no correspondence
    245 
    246     LineCapCustom           = 0xff, // custom cap
    247 
    248     LineCapAnchorMask       = 0xf0  // mask to check for anchor or not.
    249 };
    250 
    251 //--------------------------------------------------------------------------
    252 // Custom Line cap type constants
    253 //--------------------------------------------------------------------------
    254 
    255 enum CustomLineCapType
    256 {
    257     CustomLineCapTypeDefault         = 0,
    258     CustomLineCapTypeAdjustableArrow = 1
    259 };
    260 
    261 //--------------------------------------------------------------------------
    262 // Line join constants
    263 //--------------------------------------------------------------------------
    264 
    265 enum LineJoin
    266 {
    267     LineJoinMiter        = 0,
    268     LineJoinBevel        = 1,
    269     LineJoinRound        = 2,
    270     LineJoinMiterClipped = 3
    271 };
    272 
    273 //--------------------------------------------------------------------------
    274 // Path point types (only the lowest 8 bits are used.)
    275 //  The lowest 3 bits are interpreted as point type
    276 //  The higher 5 bits are reserved for flags.
    277 //--------------------------------------------------------------------------
    278 
    279 enum PathPointType
    280 {
    281     PathPointTypeStart           = 0,    // move
    282     PathPointTypeLine            = 1,    // line
    283     PathPointTypeBezier          = 3,    // default Beizer (= cubic Bezier)
    284     PathPointTypePathTypeMask    = 0x07, // type mask (lowest 3 bits).
    285     PathPointTypeDashMode        = 0x10, // currently in dash mode.
    286     PathPointTypePathMarker      = 0x20, // a marker for the path.
    287     PathPointTypeCloseSubpath    = 0x80, // closed flag
    288 
    289     // Path types used for advanced path.
    290 
    291     PathPointTypeBezier2    = 2,    // quadratic Beizer
    292     PathPointTypeBezier3    = 3,    // cubic Bezier
    293     PathPointTypeBezier4    = 4,    // quartic (4th order) Beizer
    294     PathPointTypeBezier5    = 5,    // quintic (5th order) Bezier
    295     PathPointTypeBezier6    = 6     // hexaic (6th order) Bezier
    296 };
    297 
    298 
    299 //--------------------------------------------------------------------------
    300 // WarpMode constants
    301 //--------------------------------------------------------------------------
    302 
    303 enum WarpMode
    304 {
    305     WarpModePerspective,    // 0
    306     WarpModeBilinear        // 1
    307 };
    308 
    309 //--------------------------------------------------------------------------
    310 // LineGradient Mode
    311 //--------------------------------------------------------------------------
    312 
    313 enum LinearGradientMode
    314 {
    315     LinearGradientModeHorizontal,         // 0
    316     LinearGradientModeVertical,           // 1
    317     LinearGradientModeForwardDiagonal,    // 2
    318     LinearGradientModeBackwardDiagonal    // 3
    319 };
    320 
    321 //--------------------------------------------------------------------------
    322 // Region Comine Modes
    323 //--------------------------------------------------------------------------
    324 
    325 enum CombineMode
    326 {
    327     CombineModeReplace,     // 0
    328     CombineModeIntersect,   // 1
    329     CombineModeUnion,       // 2
    330     CombineModeXor,         // 3
    331     CombineModeExclude,     // 4
    332     CombineModeComplement   // 5 (does exclude from)
    333 };
    334 
    335 //--------------------------------------------------------------------------
    336  // Image types
    337 //--------------------------------------------------------------------------
    338 
    339 enum ImageType
    340 {
    341     ImageTypeUnknown,   // 0
    342     ImageTypeBitmap,    // 1
    343     ImageTypeMetafile   // 2
    344 };
    345 
    346 //--------------------------------------------------------------------------
    347 // Interpolation modes
    348 //--------------------------------------------------------------------------
    349 
    350 enum InterpolationMode
    351 {
    352     InterpolationModeInvalid          = QualityModeInvalid,
    353     InterpolationModeDefault          = QualityModeDefault,
    354     InterpolationModeLowQuality       = QualityModeLow,
    355     InterpolationModeHighQuality      = QualityModeHigh,
    356     InterpolationModeBilinear,
    357     InterpolationModeBicubic,
    358     InterpolationModeNearestNeighbor,
    359     InterpolationModeHighQualityBilinear,
    360     InterpolationModeHighQualityBicubic
    361 };
    362 
    363 //--------------------------------------------------------------------------
    364 // Pen types
    365 //--------------------------------------------------------------------------
    366 enum PenAlignment
    367 {
    368     PenAlignmentCenter       = 0,
    369     PenAlignmentInset        = 1,
    370     PenAlignmentOutset       = 2,
    371     PenAlignmentLeft         = 3,
    372     PenAlignmentRight        = 4
    373 };
    374 
    375 //--------------------------------------------------------------------------
    376 // Brush types
    377 //--------------------------------------------------------------------------
    378 
    379 enum BrushType
    380 {
    381    BrushTypeSolidColor       = 0,
    382    BrushTypeHatchFill        = 1,
    383    BrushTypeTextureFill      = 2,
    384    BrushTypePathGradient     = 3,
    385    BrushTypeLinearGradient   = 4
    386 };
    387 
    388 //--------------------------------------------------------------------------
    389 // Pen's Fill types
    390 //--------------------------------------------------------------------------
    391 
    392 enum PenType
    393 {
    394    PenTypeSolidColor       = BrushTypeSolidColor,
    395    PenTypeHatchFill        = BrushTypeHatchFill,
    396    PenTypeTextureFill      = BrushTypeTextureFill,
    397    PenTypePathGradient     = BrushTypePathGradient,
    398    PenTypeLinearGradient   = BrushTypeLinearGradient,
    399    PenTypeUnknown          = -1
    400 };
    401 
    402 //--------------------------------------------------------------------------
    403 // Matrix Order
    404 //--------------------------------------------------------------------------
    405 
    406 enum MatrixOrder
    407 {
    408     MatrixOrderPrepend    = 0,
    409     MatrixOrderAppend     = 1
    410 };
    411 
    412 //--------------------------------------------------------------------------
    413 // Generic font families
    414 //--------------------------------------------------------------------------
    415 
    416 enum GenericFontFamily
    417 {
    418     GenericFontFamilySerif,
    419     GenericFontFamilySansSerif,
    420     GenericFontFamilyMonospace
    421 
    422 };
    423 
    424 //--------------------------------------------------------------------------
    425 // FontStyle: face types and common styles
    426 //--------------------------------------------------------------------------
    427 
    428 //  These should probably be flags
    429 
    430 //  Must have:
    431 //      Regular = 0
    432 //      Bold = 1
    433 //      Italic = 2
    434 //      BoldItalic = 3
    435 
    436 enum FontStyle
    437 {
    438     FontStyleRegular    = 0,
    439     FontStyleBold       = 1,
    440     FontStyleItalic     = 2,
    441     FontStyleBoldItalic = 3,
    442     FontStyleUnderline  = 4,
    443     FontStyleStrikeout  = 8
    444 };
    445 
    446 //---------------------------------------------------------------------------
    447 // Smoothing Mode
    448 //---------------------------------------------------------------------------
    449 
    450 enum SmoothingMode
    451 {
    452     SmoothingModeInvalid     = QualityModeInvalid,
    453     SmoothingModeDefault     = QualityModeDefault,
    454     SmoothingModeHighSpeed   = QualityModeLow,
    455     SmoothingModeHighQuality = QualityModeHigh,
    456     SmoothingModeNone,
    457     SmoothingModeAntiAlias
    458 };
    459 
    460 //---------------------------------------------------------------------------
    461 // Pixel Format Mode
    462 //---------------------------------------------------------------------------
    463 
    464 enum PixelOffsetMode
    465 {
    466     PixelOffsetModeInvalid     = QualityModeInvalid,
    467     PixelOffsetModeDefault     = QualityModeDefault,
    468     PixelOffsetModeHighSpeed   = QualityModeLow,
    469     PixelOffsetModeHighQuality = QualityModeHigh,
    470     PixelOffsetModeNone,    // no pixel offset
    471     PixelOffsetModeHalf     // offset by -0.5, -0.5 for fast anti-alias perf
    472 };
    473 
    474 //---------------------------------------------------------------------------
    475 // Text Rendering Hint
    476 //---------------------------------------------------------------------------
    477 
    478 enum TextRenderingHint
    479 {
    480 #ifdef DCR_USE_NEW_186764
    481     TextRenderingHintSystemDefault = 0,            // Glyph with system default rendering hint
    482     TextRenderingHintSingleBitPerPixelGridFit,     // Glyph bitmap with hinting
    483 #else
    484     TextRenderingHintSingleBitPerPixelGridFit = 0, // Glyph bitmap with hinting
    485 #endif // DCR_USE_NEW_186764
    486     TextRenderingHintSingleBitPerPixel,            // Glyph bitmap without hinting
    487     TextRenderingHintAntiAliasGridFit,             // Glyph anti-alias bitmap with hinting
    488     TextRenderingHintAntiAlias,                    // Glyph anti-alias bitmap without hinting
    489     TextRenderingHintClearTypeGridFit              // Glyph CT bitmap with hinting
    490 };
    491 
    492 //---------------------------------------------------------------------------
    493 // Metafile Types
    494 //---------------------------------------------------------------------------
    495 enum MetafileType
    496 {
    497     MetafileTypeInvalid,            // Invalid metafile
    498     MetafileTypeWmf,                // Standard WMF
    499     MetafileTypeWmfAldus,           // Aldus Placeable Metafile format
    500     MetafileTypeEmf,                // EMF (not EMF+)
    501     MetafileTypeEmfPlusOnly,        // EMF+ without dual, down-level records
    502     MetafileTypeEmfPlusDual         // EMF+ with dual, down-level records
    503 };
    504 
    505 // Specifies the type of EMF to record
    506 enum EmfType
    507 {
    508     EmfTypeEmfOnly     = MetafileTypeEmf,          // no EMF+, only EMF
    509     EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly,  // no EMF, only EMF+
    510     EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual   // both EMF+ and EMF
    511 };
    512 
    513 // All persistent objects must have a type listed here
    514 enum ObjectType
    515 {
    516     ObjectTypeInvalid,
    517     ObjectTypeBrush,
    518     ObjectTypePen,
    519     ObjectTypePath,
    520     ObjectTypeRegion,
    521     ObjectTypeImage,
    522     ObjectTypeFont,
    523     ObjectTypeStringFormat,
    524     ObjectTypeImageAttributes,
    525     ObjectTypeCustomLineCap,
    526 
    527     ObjectTypeMax = ObjectTypeCustomLineCap,
    528     ObjectTypeMin = ObjectTypeBrush
    529 };
    530 
    531 inline BOOL
    532 ObjectTypeIsValid(
    533     ObjectType      type
    534     )
    535 {
    536     return ((type >= ObjectTypeMin) && (type <= ObjectTypeMax));
    537 }
    538 
    539 //---------------------------------------------------------------------------
    540 // EMF+ Records
    541 //---------------------------------------------------------------------------
    542 
    543 // We have to change the WMF record numbers so that they don't conflict with
    544 // the EMF and EMF+ record numbers.
    545 enum EmfPlusRecordType;
    546 #define GDIP_EMFPLUS_RECORD_BASE        0x00004000
    547 #define GDIP_WMF_RECORD_BASE            0x00010000
    548 #define GDIP_WMF_RECORD_TO_EMFPLUS(n)   ((EmfPlusRecordType)((n) | GDIP_WMF_RECORD_BASE))
    549 #define GDIP_EMFPLUS_RECORD_TO_WMF(n)   ((n) & (~GDIP_WMF_RECORD_BASE))
    550 #define GDIP_IS_WMF_RECORDTYPE(n)       (((n) & GDIP_WMF_RECORD_BASE) != 0)
    551 
    552 enum EmfPlusRecordType
    553 {
    554    // Since we have to enumerate GDI records right along with GDI+ records,
    555    // we list all the GDI records here so that they can be part of the
    556    // same enumeration type which is used in the enumeration callback.
    557 
    558     WmfRecordTypeSetBkColor              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
    559     WmfRecordTypeSetBkMode               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
    560     WmfRecordTypeSetMapMode              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
    561     WmfRecordTypeSetROP2                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
    562     WmfRecordTypeSetRelAbs               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
    563     WmfRecordTypeSetPolyFillMode         = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
    564     WmfRecordTypeSetStretchBltMode       = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
    565     WmfRecordTypeSetTextCharExtra        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
    566     WmfRecordTypeSetTextColor            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
    567     WmfRecordTypeSetTextJustification    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
    568     WmfRecordTypeSetWindowOrg            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
    569     WmfRecordTypeSetWindowExt            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
    570     WmfRecordTypeSetViewportOrg          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
    571     WmfRecordTypeSetViewportExt          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
    572     WmfRecordTypeOffsetWindowOrg         = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
    573     WmfRecordTypeScaleWindowExt          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
    574     WmfRecordTypeOffsetViewportOrg       = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
    575     WmfRecordTypeScaleViewportExt        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
    576     WmfRecordTypeLineTo                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
    577     WmfRecordTypeMoveTo                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
    578     WmfRecordTypeExcludeClipRect         = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
    579     WmfRecordTypeIntersectClipRect       = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
    580     WmfRecordTypeArc                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
    581     WmfRecordTypeEllipse                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
    582     WmfRecordTypeFloodFill               = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
    583     WmfRecordTypePie                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
    584     WmfRecordTypeRectangle               = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
    585     WmfRecordTypeRoundRect               = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
    586     WmfRecordTypePatBlt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
    587     WmfRecordTypeSaveDC                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
    588     WmfRecordTypeSetPixel                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
    589     WmfRecordTypeOffsetClipRgn           = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
    590     WmfRecordTypeTextOut                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
    591     WmfRecordTypeBitBlt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
    592     WmfRecordTypeStretchBlt              = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
    593     WmfRecordTypePolygon                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
    594     WmfRecordTypePolyline                = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
    595     WmfRecordTypeEscape                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
    596     WmfRecordTypeRestoreDC               = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
    597     WmfRecordTypeFillRegion              = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
    598     WmfRecordTypeFrameRegion             = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
    599     WmfRecordTypeInvertRegion            = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
    600     WmfRecordTypePaintRegion             = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
    601     WmfRecordTypeSelectClipRegion        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
    602     WmfRecordTypeSelectObject            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
    603     WmfRecordTypeSetTextAlign            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
    604     WmfRecordTypeDrawText                = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),  // META_DRAWTEXT
    605     WmfRecordTypeChord                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
    606     WmfRecordTypeSetMapperFlags          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
    607     WmfRecordTypeExtTextOut              = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
    608     WmfRecordTypeSetDIBToDev             = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
    609     WmfRecordTypeSelectPalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
    610     WmfRecordTypeRealizePalette          = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
    611     WmfRecordTypeAnimatePalette          = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
    612     WmfRecordTypeSetPalEntries           = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
    613     WmfRecordTypePolyPolygon             = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
    614     WmfRecordTypeResizePalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
    615     WmfRecordTypeDIBBitBlt               = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
    616     WmfRecordTypeDIBStretchBlt           = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
    617     WmfRecordTypeDIBCreatePatternBrush   = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
    618     WmfRecordTypeStretchDIB              = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
    619     WmfRecordTypeExtFloodFill            = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
    620     WmfRecordTypeSetLayout               = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),  // META_SETLAYOUT
    621     WmfRecordTypeResetDC                 = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),  // META_RESETDC
    622     WmfRecordTypeStartDoc                = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),  // META_STARTDOC
    623     WmfRecordTypeStartPage               = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),  // META_STARTPAGE
    624     WmfRecordTypeEndPage                 = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),  // META_ENDPAGE
    625     WmfRecordTypeAbortDoc                = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),  // META_ABORTDOC
    626     WmfRecordTypeEndDoc                  = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),  // META_ENDDOC
    627     WmfRecordTypeDeleteObject            = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
    628     WmfRecordTypeCreatePalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
    629     WmfRecordTypeCreateBrush             = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),  // META_CREATEBRUSH
    630     WmfRecordTypeCreatePatternBrush      = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
    631     WmfRecordTypeCreatePenIndirect       = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
    632     WmfRecordTypeCreateFontIndirect      = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
    633     WmfRecordTypeCreateBrushIndirect     = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
    634     WmfRecordTypeCreateBitmapIndirect    = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),  // META_CREATEBITMAPINDIRECT
    635     WmfRecordTypeCreateBitmap            = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),  // META_CREATEBITMAP
    636     WmfRecordTypeCreateRegion            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
    637 
    638     EmfRecordTypeHeader                  = EMR_HEADER,
    639     EmfRecordTypePolyBezier              = EMR_POLYBEZIER,
    640     EmfRecordTypePolygon                 = EMR_POLYGON,
    641     EmfRecordTypePolyline                = EMR_POLYLINE,
    642     EmfRecordTypePolyBezierTo            = EMR_POLYBEZIERTO,
    643     EmfRecordTypePolyLineTo              = EMR_POLYLINETO,
    644     EmfRecordTypePolyPolyline            = EMR_POLYPOLYLINE,
    645     EmfRecordTypePolyPolygon             = EMR_POLYPOLYGON,
    646     EmfRecordTypeSetWindowExtEx          = EMR_SETWINDOWEXTEX,
    647     EmfRecordTypeSetWindowOrgEx          = EMR_SETWINDOWORGEX,
    648     EmfRecordTypeSetViewportExtEx        = EMR_SETVIEWPORTEXTEX,
    649     EmfRecordTypeSetViewportOrgEx        = EMR_SETVIEWPORTORGEX,
    650     EmfRecordTypeSetBrushOrgEx           = EMR_SETBRUSHORGEX,
    651     EmfRecordTypeEOF                     = EMR_EOF,
    652     EmfRecordTypeSetPixelV               = EMR_SETPIXELV,
    653     EmfRecordTypeSetMapperFlags          = EMR_SETMAPPERFLAGS,
    654     EmfRecordTypeSetMapMode              = EMR_SETMAPMODE,
    655     EmfRecordTypeSetBkMode               = EMR_SETBKMODE,
    656     EmfRecordTypeSetPolyFillMode         = EMR_SETPOLYFILLMODE,
    657     EmfRecordTypeSetROP2                 = EMR_SETROP2,
    658     EmfRecordTypeSetStretchBltMode       = EMR_SETSTRETCHBLTMODE,
    659     EmfRecordTypeSetTextAlign            = EMR_SETTEXTALIGN,
    660     EmfRecordTypeSetColorAdjustment      = EMR_SETCOLORADJUSTMENT,
    661     EmfRecordTypeSetTextColor            = EMR_SETTEXTCOLOR,
    662     EmfRecordTypeSetBkColor              = EMR_SETBKCOLOR,
    663     EmfRecordTypeOffsetClipRgn           = EMR_OFFSETCLIPRGN,
    664     EmfRecordTypeMoveToEx                = EMR_MOVETOEX,
    665     EmfRecordTypeSetMetaRgn              = EMR_SETMETARGN,
    666     EmfRecordTypeExcludeClipRect         = EMR_EXCLUDECLIPRECT,
    667     EmfRecordTypeIntersectClipRect       = EMR_INTERSECTCLIPRECT,
    668     EmfRecordTypeScaleViewportExtEx      = EMR_SCALEVIEWPORTEXTEX,
    669     EmfRecordTypeScaleWindowExtEx        = EMR_SCALEWINDOWEXTEX,
    670     EmfRecordTypeSaveDC                  = EMR_SAVEDC,
    671     EmfRecordTypeRestoreDC               = EMR_RESTOREDC,
    672     EmfRecordTypeSetWorldTransform       = EMR_SETWORLDTRANSFORM,
    673     EmfRecordTypeModifyWorldTransform    = EMR_MODIFYWORLDTRANSFORM,
    674     EmfRecordTypeSelectObject            = EMR_SELECTOBJECT,
    675     EmfRecordTypeCreatePen               = EMR_CREATEPEN,
    676     EmfRecordTypeCreateBrushIndirect     = EMR_CREATEBRUSHINDIRECT,
    677     EmfRecordTypeDeleteObject            = EMR_DELETEOBJECT,
    678     EmfRecordTypeAngleArc                = EMR_ANGLEARC,
    679     EmfRecordTypeEllipse                 = EMR_ELLIPSE,
    680     EmfRecordTypeRectangle               = EMR_RECTANGLE,
    681     EmfRecordTypeRoundRect               = EMR_ROUNDRECT,
    682     EmfRecordTypeArc                     = EMR_ARC,
    683     EmfRecordTypeChord                   = EMR_CHORD,
    684     EmfRecordTypePie                     = EMR_PIE,
    685     EmfRecordTypeSelectPalette           = EMR_SELECTPALETTE,
    686     EmfRecordTypeCreatePalette           = EMR_CREATEPALETTE,
    687     EmfRecordTypeSetPaletteEntries       = EMR_SETPALETTEENTRIES,
    688     EmfRecordTypeResizePalette           = EMR_RESIZEPALETTE,
    689     EmfRecordTypeRealizePalette          = EMR_REALIZEPALETTE,
    690     EmfRecordTypeExtFloodFill            = EMR_EXTFLOODFILL,
    691     EmfRecordTypeLineTo                  = EMR_LINETO,
    692     EmfRecordTypeArcTo                   = EMR_ARCTO,
    693     EmfRecordTypePolyDraw                = EMR_POLYDRAW,
    694     EmfRecordTypeSetArcDirection         = EMR_SETARCDIRECTION,
    695     EmfRecordTypeSetMiterLimit           = EMR_SETMITERLIMIT,
    696     EmfRecordTypeBeginPath               = EMR_BEGINPATH,
    697     EmfRecordTypeEndPath                 = EMR_ENDPATH,
    698     EmfRecordTypeCloseFigure             = EMR_CLOSEFIGURE,
    699     EmfRecordTypeFillPath                = EMR_FILLPATH,
    700     EmfRecordTypeStrokeAndFillPath       = EMR_STROKEANDFILLPATH,
    701     EmfRecordTypeStrokePath              = EMR_STROKEPATH,
    702     EmfRecordTypeFlattenPath             = EMR_FLATTENPATH,
    703     EmfRecordTypeWidenPath               = EMR_WIDENPATH,
    704     EmfRecordTypeSelectClipPath          = EMR_SELECTCLIPPATH,
    705     EmfRecordTypeAbortPath               = EMR_ABORTPATH,
    706     EmfRecordTypeReserved_069            = 69,  // Not Used
    707     EmfRecordTypeGdiComment              = EMR_GDICOMMENT,
    708     EmfRecordTypeFillRgn                 = EMR_FILLRGN,
    709     EmfRecordTypeFrameRgn                = EMR_FRAMERGN,
    710     EmfRecordTypeInvertRgn               = EMR_INVERTRGN,
    711     EmfRecordTypePaintRgn                = EMR_PAINTRGN,
    712     EmfRecordTypeExtSelectClipRgn        = EMR_EXTSELECTCLIPRGN,
    713     EmfRecordTypeBitBlt                  = EMR_BITBLT,
    714     EmfRecordTypeStretchBlt              = EMR_STRETCHBLT,
    715     EmfRecordTypeMaskBlt                 = EMR_MASKBLT,
    716     EmfRecordTypePlgBlt                  = EMR_PLGBLT,
    717     EmfRecordTypeSetDIBitsToDevice       = EMR_SETDIBITSTODEVICE,
    718     EmfRecordTypeStretchDIBits           = EMR_STRETCHDIBITS,
    719     EmfRecordTypeExtCreateFontIndirect   = EMR_EXTCREATEFONTINDIRECTW,
    720     EmfRecordTypeExtTextOutA             = EMR_EXTTEXTOUTA,
    721     EmfRecordTypeExtTextOutW             = EMR_EXTTEXTOUTW,
    722     EmfRecordTypePolyBezier16            = EMR_POLYBEZIER16,
    723     EmfRecordTypePolygon16               = EMR_POLYGON16,
    724     EmfRecordTypePolyline16              = EMR_POLYLINE16,
    725     EmfRecordTypePolyBezierTo16          = EMR_POLYBEZIERTO16,
    726     EmfRecordTypePolylineTo16            = EMR_POLYLINETO16,
    727     EmfRecordTypePolyPolyline16          = EMR_POLYPOLYLINE16,
    728     EmfRecordTypePolyPolygon16           = EMR_POLYPOLYGON16,
    729     EmfRecordTypePolyDraw16              = EMR_POLYDRAW16,
    730     EmfRecordTypeCreateMonoBrush         = EMR_CREATEMONOBRUSH,
    731     EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT,
    732     EmfRecordTypeExtCreatePen            = EMR_EXTCREATEPEN,
    733     EmfRecordTypePolyTextOutA            = EMR_POLYTEXTOUTA,
    734     EmfRecordTypePolyTextOutW            = EMR_POLYTEXTOUTW,
    735     EmfRecordTypeSetICMMode              = 98,  // EMR_SETICMMODE,
    736     EmfRecordTypeCreateColorSpace        = 99,  // EMR_CREATECOLORSPACE,
    737     EmfRecordTypeSetColorSpace           = 100, // EMR_SETCOLORSPACE,
    738     EmfRecordTypeDeleteColorSpace        = 101, // EMR_DELETECOLORSPACE,
    739     EmfRecordTypeGLSRecord               = 102, // EMR_GLSRECORD,
    740     EmfRecordTypeGLSBoundedRecord        = 103, // EMR_GLSBOUNDEDRECORD,
    741     EmfRecordTypePixelFormat             = 104, // EMR_PIXELFORMAT,
    742     EmfRecordTypeDrawEscape              = 105, // EMR_RESERVED_105,
    743     EmfRecordTypeExtEscape               = 106, // EMR_RESERVED_106,
    744     EmfRecordTypeStartDoc                = 107, // EMR_RESERVED_107,
    745     EmfRecordTypeSmallTextOut            = 108, // EMR_RESERVED_108,
    746     EmfRecordTypeForceUFIMapping         = 109, // EMR_RESERVED_109,
    747     EmfRecordTypeNamedEscape             = 110, // EMR_RESERVED_110,
    748     EmfRecordTypeColorCorrectPalette     = 111, // EMR_COLORCORRECTPALETTE,
    749     EmfRecordTypeSetICMProfileA          = 112, // EMR_SETICMPROFILEA,
    750     EmfRecordTypeSetICMProfileW          = 113, // EMR_SETICMPROFILEW,
    751     EmfRecordTypeAlphaBlend              = 114, // EMR_ALPHABLEND,
    752     EmfRecordTypeSetLayout               = 115, // EMR_SETLAYOUT,
    753     EmfRecordTypeTransparentBlt          = 116, // EMR_TRANSPARENTBLT,
    754     EmfRecordTypeReserved_117            = 117, // Not Used
    755     EmfRecordTypeGradientFill            = 118, // EMR_GRADIENTFILL,
    756     EmfRecordTypeSetLinkedUFIs           = 119, // EMR_RESERVED_119,
    757     EmfRecordTypeSetTextJustification    = 120, // EMR_RESERVED_120,
    758     EmfRecordTypeColorMatchToTargetW     = 121, // EMR_COLORMATCHTOTARGETW,
    759     EmfRecordTypeCreateColorSpaceW       = 122, // EMR_CREATECOLORSPACEW,
    760     EmfRecordTypeMax                     = 122,
    761     EmfRecordTypeMin                     = 1,
    762 
    763     // That is the END of the GDI EMF records.
    764 
    765     // Now we start the list of EMF+ records.  We leave quite
    766     // a bit of room here for the addition of any new GDI
    767     // records that may be added later.
    768 
    769     EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE,
    770     EmfPlusRecordTypeHeader,
    771     EmfPlusRecordTypeEndOfFile,
    772 
    773     EmfPlusRecordTypeComment,
    774 
    775     EmfPlusRecordTypeGetDC,    // the application grabbed the metafile dc
    776 
    777     EmfPlusRecordTypeMultiFormatStart,
    778     EmfPlusRecordTypeMultiFormatSection,
    779     EmfPlusRecordTypeMultiFormatEnd,
    780 
    781     // For all persistent objects
    782     EmfPlusRecordTypeObject, // brush,pen,path,region,image,font,string-format
    783 
    784     // Drawing Records
    785     EmfPlusRecordTypeClear,
    786     EmfPlusRecordTypeFillRects,
    787     EmfPlusRecordTypeDrawRects,
    788     EmfPlusRecordTypeFillPolygon,
    789     EmfPlusRecordTypeDrawLines,
    790     EmfPlusRecordTypeFillEllipse,
    791     EmfPlusRecordTypeDrawEllipse,
    792     EmfPlusRecordTypeFillPie,
    793     EmfPlusRecordTypeDrawPie,
    794     EmfPlusRecordTypeDrawArc,
    795     EmfPlusRecordTypeFillRegion,
    796     EmfPlusRecordTypeFillPath,
    797     EmfPlusRecordTypeDrawPath,
    798     EmfPlusRecordTypeFillClosedCurve,
    799     EmfPlusRecordTypeDrawClosedCurve,
    800     EmfPlusRecordTypeDrawCurve,
    801     EmfPlusRecordTypeDrawBeziers,
    802     EmfPlusRecordTypeDrawImage,
    803     EmfPlusRecordTypeDrawImagePoints,
    804     EmfPlusRecordTypeDrawString,
    805 
    806     // Graphics State Records
    807     EmfPlusRecordTypeSetRenderingOrigin,
    808     EmfPlusRecordTypeSetAntiAliasMode,
    809     EmfPlusRecordTypeSetTextRenderingHint,
    810 #ifdef DCR_USE_NEW_188922
    811    EmfPlusRecordTypeSetTextContrast,
    812 #else
    813    EmfPlusRecordTypeSetGammaValue,
    814 #endif // DCR_USE_NEW_188922
    815     EmfPlusRecordTypeSetInterpolationMode,
    816     EmfPlusRecordTypeSetPixelOffsetMode,
    817     EmfPlusRecordTypeSetCompositingMode,
    818     EmfPlusRecordTypeSetCompositingQuality,
    819     EmfPlusRecordTypeSave,
    820     EmfPlusRecordTypeRestore,
    821     EmfPlusRecordTypeBeginContainer,
    822     EmfPlusRecordTypeBeginContainerNoParams,
    823     EmfPlusRecordTypeEndContainer,
    824     EmfPlusRecordTypeSetWorldTransform,
    825     EmfPlusRecordTypeResetWorldTransform,
    826     EmfPlusRecordTypeMultiplyWorldTransform,
    827     EmfPlusRecordTypeTranslateWorldTransform,
    828     EmfPlusRecordTypeScaleWorldTransform,
    829     EmfPlusRecordTypeRotateWorldTransform,
    830     EmfPlusRecordTypeSetPageTransform,
    831     EmfPlusRecordTypeResetClip,
    832     EmfPlusRecordTypeSetClipRect,
    833     EmfPlusRecordTypeSetClipPath,
    834     EmfPlusRecordTypeSetClipRegion,
    835     EmfPlusRecordTypeOffsetClip,
    836 
    837     // New record types must be added here (at the end) -- do not add above,
    838     // since that will invalidate previous metafiles!
    839     EmfPlusRecordTypeDrawDriverString,
    840 
    841     // Have this here so you don't need to keep changing the value of
    842     // EmfPlusRecordTypeMax every time you add a new record.
    843 
    844     EmfPlusRecordTotal,
    845 
    846     EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
    847     EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader,
    848 };
    849 
    850 //---------------------------------------------------------------------------
    851 // StringFormatFlags
    852 //---------------------------------------------------------------------------
    853 
    854 //---------------------------------------------------------------------------
    855 // String format flags
    856 //
    857 //  DirectionRightToLeft          - For horizontal text, the reading order is
    858 //                                  right to left. This value is called
    859 //                                  the base embedding level by the Unicode
    860 //                                  bidirectional engine.
    861 //                                  For vertical text, columns are read from
    862 //                                  right to left.
    863 //                                  By default, horizontal or vertical text is
    864 //                                  read from left to right.
    865 //
    866 //  DirectionVertical             - Individual lines of text are vertical. In
    867 //                                  each line, characters progress from top to
    868 //                                  bottom.
    869 //                                  By default, lines of text are horizontal,
    870 //                                  each new line below the previous line.
    871 //
    872 //  NoFitBlackBox                 - Allows parts of glyphs to overhang the
    873 //                                  bounding rectangle.
    874 //                                  By default glyphs are first aligned
    875 //                                  inside the margines, then any glyphs which
    876 //                                  still overhang the bounding box are
    877 //                                  repositioned to avoid any overhang.
    878 //                                  For example when an italic
    879 //                                  lower case letter f in a font such as
    880 //                                  Garamond is aligned at the far left of a
    881 //                                  rectangle, the lower part of the f will
    882 //                                  reach slightly further left than the left
    883 //                                  edge of the rectangle. Setting this flag
    884 //                                  will ensure the character aligns visually
    885 //                                  with the lines above and below, but may
    886 //                                  cause some pixels outside the formatting
    887 //                                  rectangle to be clipped or painted.
    888 //
    889 #ifndef DCR_USE_NEW_137252
    890 //  NumberContextArabic           - Causes any initial numeric in the string to
    891 //                                  be analysed for bidirection layout as if
    892 //                                  it was preceeded by Arabic text.
    893 //
    894 //  DisableKashidaJustification   - Arabic text will not be justified by the
    895 //                                  insertion of kashidas (i.e. extending the
    896 //                                  joining line between characters). Instead
    897 //                                  Arabic script will be justified by the
    898 //                                  widening of the whitespace between words.
    899 //
    900 #endif
    901 //  DisplayFormatControl          - Causes control characters such as the
    902 //                                  left-to-right mark to be shown in the
    903 //                                  output with a representative glyph.
    904 //
    905 #ifndef DCR_USE_NEW_137252
    906 //  DisableKerning                - Disables Truetype and OpenType kerning.
    907 //
    908 //  DisableLigatures              - Disables Truetype and OpenType ligatures.
    909 //
    910 //  LayoutLegacyBidi              - Causes the bidirection algorithm to use
    911 //                                  slightly different classifications for
    912 //                                  '+', '-' and '/' that make their layout
    913 //                                  much closer to that expected by files
    914 //                                  generated in Windows or by Windows
    915 //                                  applications.
    916 //
    917 //  NoChanges                     - A text imager created with this flag set
    918 //                                  does not support those APIs that change
    919 //                                  it's contents or formatting, but for most
    920 //                                  simple text will be significantly faster in
    921 //                                  performing measurement and drawing
    922 //                                  functions.
    923 //
    924 #endif
    925 //  NoFontFallback                - Disables fallback to alternate fonts for
    926 //                                  characters not supported in the requested
    927 //                                  font. Any missing characters will be
    928 //                                  be displayed with the fonts missing glyph,
    929 //                                  usually an open square.
    930 //
    931 //  NoWrap                        - Disables wrapping of text between lines
    932 //                                  when formatting within a rectangle.
    933 //                                  NoWrap is implied when a point is passed
    934 //                                  instead of a rectangle, or when the
    935 //                                  specified rectangle has a zero line length.
    936 //
    937 //  NoClip                        - By default text is clipped to the
    938 //                                  formatting rectangle. Setting NoClip
    939 //                                  allows overhanging pixels to affect the
    940 //                                  device outside the formatting rectangle.
    941 //                                  Pixels at the end of the line may be
    942 //                                  affected if the glyphs overhang their
    943 //                                  cells, and either the NoFitBlackBox flag
    944 //                                  has been set, or the glyph extends to far
    945 //                                  to be fitted.
    946 //                                  Pixels above/before the first line or
    947 //                                  below/after the last line may be affected
    948 //                                  if the glyphs extend beyond their cell
    949 //                                  ascent / descent. This can occur rarely
    950 //                                  with unusual diacritic mark combinations.
    951 
    952 //---------------------------------------------------------------------------
    953 
    954 enum StringFormatFlags
    955 {
    956     StringFormatFlagsDirectionRightToLeft        = 0x00000001,
    957     StringFormatFlagsDirectionVertical           = 0x00000002,
    958     StringFormatFlagsNoFitBlackBox               = 0x00000004,
    959 #ifndef DCR_USE_NEW_137252
    960     StringFormatFlagsNumberContextArabic         = 0x00000008,
    961     StringFormatFlagsDisableKashidaJustification = 0x00000010,
    962 #endif
    963     StringFormatFlagsDisplayFormatControl        = 0x00000020,
    964 #ifndef DCR_USE_NEW_137252
    965     StringFormatFlagsDisableKerning              = 0x00000040,
    966     StringFormatFlagsDisableLigatures            = 0x00000080,
    967     StringFormatFlagsLayoutLegacyBidi            = 0x00000100,
    968     StringFormatFlagsNoChanges                   = 0x00000200,
    969 #endif
    970     StringFormatFlagsNoFontFallback              = 0x00000400,
    971     StringFormatFlagsMeasureTrailingSpaces       = 0x00000800,
    972     StringFormatFlagsNoWrap                      = 0x00001000,
    973     StringFormatFlagsLineLimit                   = 0x00002000,
    974 
    975     StringFormatFlagsNoClip                      = 0x00004000
    976 };
    977 
    978 //---------------------------------------------------------------------------
    979 // StringTrimming
    980 //---------------------------------------------------------------------------
    981 
    982 enum StringTrimming {
    983     StringTrimmingNone              = 0,
    984     StringTrimmingCharacter         = 1,
    985     StringTrimmingWord              = 2,
    986     StringTrimmingEllipsisCharacter = 3,
    987     StringTrimmingEllipsisWord      = 4,
    988     StringTrimmingEllipsisPath      = 5
    989 };
    990 
    991 #ifndef DCR_USE_NEW_137252
    992 //---------------------------------------------------------------------------
    993 // String units
    994 //
    995 // String units are like length units in CSS, they may be absolute, or
    996 // they may be relative to a font size.
    997 //
    998 //---------------------------------------------------------------------------
    999 
   1000 enum StringUnit {
   1001     StringUnitWorld        = UnitWorld,
   1002     StringUnitDisplay      = UnitDisplay,
   1003     StringUnitPixel        = UnitPixel,
   1004     StringUnitPoint        = UnitPoint,
   1005     StringUnitInch         = UnitInch,
   1006     StringUnitDocument     = UnitDocument,
   1007     StringUnitMillimeter   = UnitMillimeter,
   1008     StringUnitEm           = 32
   1009 };
   1010 #endif
   1011 
   1012 #ifndef DCR_USE_NEW_152154
   1013 //---------------------------------------------------------------------------
   1014 // Line spacing flags
   1015 //---------------------------------------------------------------------------
   1016 
   1017 enum LineSpacing {
   1018     LineSpacingWorld                = UnitWorld,
   1019     LineSpacingDisplay              = UnitDisplay,
   1020     LineSpacingPixel                = UnitPixel,
   1021     LineSpacingPoint                = UnitPoint,
   1022     LineSpacingInch                 = UnitInch,
   1023     LineSpacingDocument             = UnitDocument,
   1024     LineSpacingMillimeter           = UnitMillimeter,
   1025 
   1026     LineSpacingRecommended          = 32,
   1027     LineSpacingAtLeast              = 33,
   1028     LineSpacingAtLeastMultiple      = 34,
   1029     LineSpacingCell                 = 35,
   1030     LineSpacingCellAtLeast          = 36,
   1031     LineSpacingCellAtLeastMultiple  = 37
   1032 };
   1033 
   1034 /// The following methods of linespacing are relative to the font size
   1035 //
   1036 // =========== Method ===========  =============== Relative to ===============
   1037 //
   1038 // LineSpacingRecommended          recommended line spacing specified by font
   1039 // LineSpacingAtLeast              max(recommended, tallest glyph cell)
   1040 // LineSpacingAtLeastMultiple      smallest multiple of recommended big enough
   1041 //                                 for all glyph cells on the line
   1042 // LineSpacingCell                 cell height
   1043 // LineSpacingCellAtLeast          max(font cell height, tallest glyph cell)
   1044 // LineSpacingCellAtLeastMultiple  smallest multiple of cell height big enough
   1045 //                                 for all glyph cells on the line
   1046 #endif
   1047 
   1048 
   1049 //---------------------------------------------------------------------------
   1050 // National language digit substitution
   1051 //---------------------------------------------------------------------------
   1052 
   1053 enum StringDigitSubstitute
   1054 {
   1055     StringDigitSubstituteUser        = 0,  // As NLS setting
   1056     StringDigitSubstituteNone        = 1,
   1057     StringDigitSubstituteNational    = 2,
   1058     StringDigitSubstituteTraditional = 3
   1059 };
   1060 
   1061 //---------------------------------------------------------------------------
   1062 // Hotkey prefix interpretation
   1063 //---------------------------------------------------------------------------
   1064 
   1065 enum HotkeyPrefix
   1066 {
   1067     HotkeyPrefixNone        = 0,
   1068     HotkeyPrefixShow        = 1,
   1069     HotkeyPrefixHide        = 2
   1070 };
   1071 
   1072 //---------------------------------------------------------------------------
   1073 // Text alignment flags
   1074 //---------------------------------------------------------------------------
   1075 
   1076 enum StringAlignment
   1077 {
   1078     // Left edge for left-to-right text,
   1079     // right for right-to-left text,
   1080     // and top for vertical
   1081     StringAlignmentNear   = 0,
   1082     StringAlignmentCenter = 1,
   1083     StringAlignmentFar    = 2
   1084 };
   1085 
   1086 //---------------------------------------------------------------------------
   1087 // DriverStringOptions
   1088 //---------------------------------------------------------------------------
   1089 
   1090 enum DriverStringOptions
   1091 {
   1092     DriverStringOptionsCmapLookup             = 1,
   1093     DriverStringOptionsVertical               = 2,
   1094     DriverStringOptionsRealizedAdvance        = 4,
   1095 #ifndef DCR_USE_NEW_137252
   1096     DriverStringOptionsCompensateResolution   = 8
   1097 #endif
   1098 };
   1099 
   1100 //---------------------------------------------------------------------------
   1101 // Flush Intention flags
   1102 //---------------------------------------------------------------------------
   1103 
   1104 enum FlushIntention
   1105 {
   1106     FlushIntentionFlush = 0,        // Flush all batched rendering operations
   1107     FlushIntentionSync = 1          // Flush all batched rendering operations
   1108                                     // and wait for them to complete
   1109 };
   1110 
   1111 #ifndef DCR_USE_NEW_175866
   1112 
   1113 //---------------------------------------------------------------------------
   1114 // Window Change Notification types
   1115 //---------------------------------------------------------------------------
   1116 
   1117 enum WindowNotifyEnum
   1118 {
   1119    WindowNotifyEnumEnable = 0,
   1120    WindowNotifyEnumDisable,
   1121    WindowNotifyEnumPalette,
   1122    WindowNotifyEnumDisplay,
   1123    WindowNotifyEnumSysColor
   1124 };
   1125 
   1126 #endif
   1127 
   1128 //---------------------------------------------------------------------------
   1129 // Image encoder parameter related types
   1130 //---------------------------------------------------------------------------
   1131 
   1132 #ifdef DCR_USE_NEW_145804
   1133 enum EncoderParameterValueType
   1134 {
   1135     EncoderParameterValueTypeByte           = 1,    // 8-bit unsigned int
   1136     EncoderParameterValueTypeASCII          = 2,    // 8-bit byte containing one 7-bit ASCII
   1137                                                     // code. NULL terminated.
   1138     EncoderParameterValueTypeShort          = 3,    // 16-bit unsigned int
   1139     EncoderParameterValueTypeLong           = 4,    // 32-bit unsigned int
   1140     EncoderParameterValueTypeRational       = 5,    // Two Longs. The first Long is the
   1141                                                     // numerator, the second Long expresses the
   1142                                                     // denomintor.
   1143     EncoderParameterValueTypeLongRange      = 6,    // Two longs which specify a range of
   1144                                                     // integer values. The first Long specifies
   1145                                                     // the lower end and the second one
   1146                                                     // specifies the higher end. All values
   1147                                                     // are inclusive at both ends
   1148     EncoderParameterValueTypeUndefined      = 7,    // 8-bit byte that can take any value
   1149                                                     // depending on field definition
   1150     EncoderParameterValueTypeRationalRange  = 8     // Two Rationals. The first Rational
   1151                                                     // specifies the lower end and the second
   1152                                                     // specifies the higher end. All values
   1153                                                     // are inclusive at both ends
   1154 };
   1155 #else
   1156 enum ValueType
   1157 {
   1158     ValueTypeByte           = 1,    // 8-bit unsigned int
   1159     ValueTypeASCII          = 2,    // 8-bit byte containing one 7-bit ASCII
   1160                                     // code. NULL terminated.
   1161     ValueTypeShort          = 3,    // 16-bit unsigned int
   1162     ValueTypeLong           = 4,    // 32-bit unsigned int
   1163     ValueTypeRational       = 5,    // Two Longs. The first Long is the
   1164                                     // numerator, the second Long expresses the
   1165                                     // denomintor.
   1166     ValueTypeLongRange      = 6,    // Two longs which specify a range of
   1167                                     // integer values. The first Long specifies
   1168                                     // the lower end and the second one
   1169                                     // specifies the higher end. All values
   1170                                     // are inclusive at both ends
   1171     ValueTypeUndefined      = 7,    // 8-bit byte that can take any value
   1172                                     // depending on field definition
   1173     ValueTypeRationalRange  = 8     // Two Rationals. The first Rational
   1174                                     // specifies the lower end and the second
   1175                                     // specifies the higher end. All values
   1176                                     // are inclusive at both ends
   1177 };
   1178 #endif
   1179 
   1180 //---------------------------------------------------------------------------
   1181 // Image encoder value types
   1182 //---------------------------------------------------------------------------
   1183 
   1184 enum EncoderValue
   1185 {
   1186     EncoderValueColorTypeCMYK,
   1187     EncoderValueColorTypeYCCK,
   1188     EncoderValueCompressionLZW,
   1189     EncoderValueCompressionCCITT3,
   1190     EncoderValueCompressionCCITT4,
   1191     EncoderValueCompressionRle,
   1192     EncoderValueCompressionNone,
   1193     EncoderValueScanMethodInterlaced,
   1194     EncoderValueScanMethodNonInterlaced,
   1195     EncoderValueVersionGif87,
   1196     EncoderValueVersionGif89,
   1197     EncoderValueRenderProgressive,
   1198     EncoderValueRenderNonProgressive,
   1199     EncoderValueTransformRotate90,
   1200     EncoderValueTransformRotate180,
   1201     EncoderValueTransformRotate270,
   1202     EncoderValueTransformFlipHorizontal,
   1203     EncoderValueTransformFlipVertical,
   1204     #ifdef DCR_USE_NEW_140861
   1205     EncoderValueMultiFrame,
   1206     #else
   1207     EncodeValueMultiFrame,
   1208     #endif
   1209     EncoderValueLastFrame,
   1210     EncoderValueFlush,
   1211     #ifdef DCR_USE_NEW_140861
   1212     EncoderValueFrameDimensionTime,
   1213     EncoderValueFrameDimensionResolution,
   1214     EncoderValueFrameDimensionPage
   1215     #else
   1216     EncodeValueFrameDimensionTime,
   1217     EncodeValueFrameDimensionResolution,
   1218     EncodeValueFrameDimensionPage
   1219     #endif
   1220 };
   1221 
   1222 //---------------------------------------------------------------------------
   1223 // Graphics layout values (support for Middle East localization)
   1224 //---------------------------------------------------------------------------
   1225 
   1226 enum GraphicsLayout
   1227 {
   1228     GraphicsLayoutNormal,
   1229     GraphicsLayoutMirrored,
   1230     GraphicsLayoutMirroredIgnoreImages,
   1231     GraphicsLayoutMirroredForceImages
   1232 };
   1233 
   1234 //---------------------------------------------------------------------------
   1235 // Image layout values (support for Middle East localization)
   1236 //---------------------------------------------------------------------------
   1237 
   1238 enum ImageLayout
   1239 {
   1240     ImageLayoutNormal,
   1241     ImageLayoutIgnoreMirrored
   1242 };
   1243 
   1244 enum EmfToWmfBitsFlags
   1245 {
   1246     EmfToWmfBitsFlagsDefault    = 0x00000000,
   1247     EmfToWmfBitsFlagsEmbedEmf   = 0x00000001,
   1248     EmfToWmfBitsFlagsIncludeAPM = 0x00000002,
   1249     EmfToWmfBitsFlagsNoXORClip  = 0x00000004
   1250 };
   1251 
   1252 #endif // !_GDIPLUSENUMS_H
   1253